<?php
/**
 * --------------------------------------------------------------
 * 主函数库
 * Author: zd <kfzphp@126.com>
 * Date: 2018-06-01
 * Project: kfzphp.com
 * --------------------------------------------------------------
 */

/**
 * 系统提示信息整页输出
 * @param  string     $info  [消息文字]
 * @param  boolean    $issys [是否是系统提示]
 */
function msg($info = '', $issys = false)
{
    $info = (!APP_DEBUG && !empty($issys)) ? config('ERROR_COMMON') : $info;
    $info = !empty($info) ? $info : '服务器繁忙..';
    echo <<<EOT
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="white">
    <meta name="viewport" id="viewport" content="minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0, width=device-width, user-scalable=no">
    <title>友情提醒</title>
    <style type="text/css">
        body{position: relative;padding: 0}
        .cont{width: 100%;height: 9.5rem;position: absolute;margin-top: 50vh;transform: translate(0,-4.7rem);}
        .cont > div{background-color: #c9eded;margin: 0 auto;border-radius: 50%;padding: 0.7rem;width: 6.5rem;}
        .cont > div div{width: 6.5rem;height: 6.5rem;background-color: #f0f7f7;margin:0 auto;border-radius: 50%;color:#c9eded;font-size: 6rem;text-align: center;line-height: 6.5rem}
        .cont p{color:#c9eded;font-size: 1.3rem;text-align: center;margin-top: 0.5rem}
    </style>
</head>
<body>
    <div class="cont">
        <div>
            <div>
                !
            </div>
        </div>
        <p>{$info}</p>
    </div>
</body>
</html>
EOT;
    exit;
}

/**
 * 生成链接
 * @param  string     $route     [模块/控制器/方法]
 * @param  array      $param     [GET参数数组]
 * @param  boolean    $is_domain [是否显示域名]
 */
function url($route = '', $param = [], $is_domain = false)
{
    // 判断
    if (empty($route)) {
        return false;
    }

    // 路由
    $r = array_filter(explode('/', $route));
    switch (count($r)) {
        case 1:
            $action = $r[0];
            break;
        case 2:
            $controller = $r[0];
            $action = $r[1];
            break;
        case 3:
            $module = $r[0];
            $controller = $r[1];
            $action = $r[2];
            break;
        default:
            return false;
            break;
    }
    $module = !empty($module) ? $module : (MODULE_NAME ? MODULE_NAME : DEFAULT_MODULE);
    $controller = !empty($controller) ? $controller : (CONTROLLER_NAME ? CONTROLLER_NAME : DEFAULT_CONTROLLER);
    $action = !empty($action) ? $action : (ACTION_NAME ? ACTION_NAME : DEFAULT_ACTION);

    // 参数
    if (empty($param)) {
        $parameters = '';
    } else {
        $array = array();
        foreach ($param as $k => $v) {
            $array[] = $k . '=' . $v;
        }
        $string = implode('&', $array);
        $parameters = '?' . $string;
    }

    $domain = !empty($is_domain) ? BASE_URL : '';
    return $domain . '/' . $module . '/' . $controller . '/' . $action . $parameters;
}

/**
 * Json返回信息
 * @param  array      $data [数组数据]
 */
function json($data = [])
{
    // 返回JSON数据格式到客户端 包含状态信息
    header('Content-Type:application/json; charset=utf-8');
    if (empty($data)) {
        exit('json data empty');
    }
    exit(json_encode($data));
}

/**
 * 生成完整表名
 * @param  [type] $table_name [表名]
 * @param  [type] $index      [数据库标识]
 */
function tab($table_name, $index)
{
    if (empty($table_name)) {
        return '';
    }
    $index = !empty($index) ? strtoupper($index) : 'MASTER';
    $prefix = $GLOBALS['_CFG']['MYSQL'][$index]['DB_PREFIX'];
    return $prefix . '_' . $table_name;
}

/**
 * 特殊字符处理
 * @param  [type]     $str [description]
 * @return [type]          [description]
 */
function data_process($str)
{
    if (!empty($str)) {
        return addslashes(htmlspecialchars(trim($str), ENT_QUOTES));
    } else {
        return '';
    }
}

/**
 * 特殊字符还原
 * @param  [type]     $str [description]
 * @return [type]          [description]
 */
function data_restore($str)
{
    if (!empty($str)) {
        return htmlspecialchars_decode(stripslashes($str));
    } else {
        return '';
    }
}

/**
 * 读取配置文件
 * @param  string     $val [description]
 * @return [type]          [description]
 */
function config($val = '')
{
    $conf1 = $GLOBALS['_CFG'];
    $conf2 = include CONFIG_PATH . '/' . MODULE_NAME . '.php';
    $conf2 = !empty($conf2) ? $conf2 : array();
    $config = array_merge($conf1, $conf2);
    if (empty($val)) {
        return $config;
    } else if ($val && isset($config[$val])) {
        return $config[$val];
    } else {
        return false;
    }
}

/**
 * session 取值赋值
 * @param  string     $key [description]
 * @param  string     $val [description]
 * @return [type]          [description]
 */
function session($key = '', $val = '')
{
    if (is_null($key) && empty($val)) {
        // 销毁所有的session
        $_SESSION = null;
        session_unset();
        session_destroy();
    } else if (!empty($key) && is_null($val)) {
        // 销毁单个session
        unset($_SESSION[config('COOKIE_PREFIX') . $key]);
    } else if (!empty($key) && !empty($val)) {
        // 赋值
        $_SESSION[config('COOKIE_PREFIX') . $key] = $val;
    } else if (!empty($key) && empty($val)) {
        // 取值
        if(isset($_SESSION[config('COOKIE_PREFIX') . $key])) {
            return $_SESSION[config('COOKIE_PREFIX') . $key];
        } else {
            return false;
        }
    } else {
        return false;
    }
}

/**
 * 获取where sql
 * @param  string     $array [description]
 * @param  boolean    $or    [description]
 * @return [type]            [description]
 */
function get_where($array = '', $or = false)
{
    // $array = [
    //     'name' => 'tom',
    //     'dept' => ['like' => 'yanfa'],
    //     'age' => ['not between' => ['20', '30']],
    //     'sno' => ['<>' => '10000'],
    //     'OR' => ['sale' => ['>' => '0'], 'city' => 'nanchang'],
    // ];
    // pt($array);
    if ($array) {
        $sql = [];
        foreach ($array as $field => $exp) {
            if (is_array($exp)) {
                if($field == 'OR') {
                    $sql[] = get_where($exp, true);
                } else {
                    // 获取表达值
                    $keys = array_keys($exp)[0];
                    $values = array_values($exp)[0];
                    // 如果是数组
                    if (strpos($keys, 'between') !== false) {
                        $sql[] = $field . ' ' . $keys . ' "' . $values[0] . '" and "' . $values[1] . '"';
                    } else if (strpos($keys, 'like') !== false) {
                        $sql[] = $field . ' ' . $keys . ' "%' . $values . '%"';
                    } else {
                        $sql[] = $field . ' ' . $keys . ' "' . $values . '"';
                    }
                }
            } else {
                // 如果不是数组
                $sql[] = $field . ' = "' . $exp . '"';
            }
        }
        if($or) {
            // or 整合
            $sql = ' (' . implode(' or ', $sql) . ') ';
        } else {
            $sql = ' where ' . implode(' and ', $sql) . ' ';
        }
        return $sql;
    }
    return '';
}

/**
 * 获取真实图片
 * @param  [type]     $picpath [description]
 * @param  [type]     $default [description]
 * @return [type]              [description]
 */
function default_pictrue($picpath, $default, $local = true)
{
    if($local) {
        if (!empty($picpath) && file_exists('.' . $picpath)) {
            return $picpath;
        } else {
            return $default;
        }
    } else {
        return !empty($picpath) ? $picpath : $default;
    }
}

// 过滤掉emoji表情
function filter_emoji($str)
{
    $str = preg_replace_callback(
        '/./u',
        function (array $match) {
            return strlen($match[0]) >= 4 ? '*' : $match[0];
        },
        $str);
    return $str;
}

/**
 * token 加密
 * @param  [type]     $timestamp [当前时间]
 * @return [type]                [加密token]
 */
function token_encrypt($timestamp)
{
    if ($timestamp) {
        return md5($GLOBALS['_CFG']['TOKEN_ENCRYPT_STRING'] . '=' . $timestamp);
    } else {
        return false;
    }
}

/**
 * 按数组的某一字段排序
 */
function array_valsort($arr, $field, $desc = 0)
{
    if ($arr) {
        $vals = array();
        $j = 0;
        foreach ($arr as $k => $v) {
            // 字段排序
            $vals[$j++] = $v[$field];
        }
        // 对数组排序
        $sort = !empty($desc) ? SORT_DESC : SORT_ASC;
        array_multisort($vals, $sort, $arr);
        return $arr;
    } else {
        return false;
    }
}
